/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package energiebedrijf.Classes;

import java.io.Serializable;
import java.util.*;


/** Een klasse om klant gegevens in te bewaren.
 * @author pdb
 */
public class Klant implements Serializable {
    private Integer klantId = -1;
    private String klantNaam = "";
    private String straat = "";
    private String huisnummer = "";
    private String postCode = "";
    private String plaats = "";
    private ArrayList<Perceel> perceelCollection;
    private Boolean isChanged = false;

    /**
     * Maakt een nieuw, leeg, object aan.
     */
    public Klant() {
    }
    
    /**
     * Haalt het ID van deze klant op.
     * @return Geeft een Integer terug.
     */
    public Integer getKlantId() {
        return klantId;
    }

    /**
     * Stelt het klant ID in.
     * @param klantId Het klant id.
     */
    public void setKlantId(Integer klantId) {
        this.klantId = klantId;
    }

    /**
     * Haalt de klantnaam op.
     * @return Een string met de klantnaam.
     */
    public String getKlantNaam() {
        return klantNaam;
    }

    /**
     * Stelt de klantnaam in.
     * @param klantNaam De naam van de klant.
     */
    public void setKlantNaam(String klantNaam) {
        if (!this.getKlantNaam().equals(klantNaam)) {
            this.setIsChanged(true);
        }
        this.klantNaam = klantNaam;
    }

    /**
     * Haalt de straatnaam op.
     * @return Een string met de straatnaam.
     */
    public String getStraat() {
        return straat;
    }

    /**
     * Stelt de straatnaam in.
     * @param straat Een string met de straatnaam.
     */
    public void setStraat(String straat) {
        if (!this.getStraat().equals(straat)) {
            this.setIsChanged(true);
        }
        this.straat = straat;
    }

    /**
     * Haalt het huisnummer op.
     * @return Een string met het huisnummer.
     */
    public String getHuisnummer() {
        return huisnummer;
    }

    /**
     * Stelt het huisnummer in.
     * @param huisnummer Een string met het huisnummer.
     */
    public void setHuisnummer(String huisnummer) {
        if (!this.getHuisnummer().equals(huisnummer)) {
            this.setIsChanged(true);
        }
        this.huisnummer = huisnummer;
    }

    /**
     * Haalt de postcode op.
     * @return Een string met de postcode.
     */
    public String getPostcode() {
        return postCode;
    }

    /**
     * Stelt de postcode in.
     * @param postCode Een string met de postcode.
     */
    public void setPostcode(String postCode) {
        if (!this.getPostcode().equals(postCode)) {
            this.setIsChanged(true);
        }
        this.postCode = postCode;
    }

    /**
     * Haalt de plaatsnaam op.
     * @return Een string met de plaatsnaam.
     */
    public String getPlaats() {
        return plaats;
    }

    /**
     * Stelt de plaatsnaam in.
     * @param plaats Een string met de plaatsnaam.
     */
    public void setPlaats(String plaats) {
        if (this.getPlaats().equals(plaats)) {
            this.setIsChanged(true);
        }
        this.plaats = plaats;
    }

    /**
     * Haalt een collectie met percelen op die bij deze klant horen.
     * @return Een collectie van percelen.
     */
    public Collection<Perceel> getPerceelCollection() {
        return perceelCollection;
    }

    /**
     * Stelt de collectie van percelen in.
     * @param perceelCollection Een collectie van percelen.
     */
    public void setPerceelCollection(ArrayList<Perceel> perceelCollection) {
        this.perceelCollection = perceelCollection;
    }

    /**
     * Geeft een hashcode terug voor deze klant.
     * @return Een integer met de hashcode.
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (klantId != null ? klantId.hashCode() : 0);
        return hash;
    }

    /**
     * Vergelijkt 2 klant objecten en controleert of ze gelijk zijn.
     * @param object Het object waarmee vergeleken moet worden
     * @return True als ze gelijk zijn anders false.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Klant)) {
            return false;
        }
        Klant other = (Klant) object;
        if ((this.klantId == null && other.klantId != null) || (this.klantId != null && !this.klantId.equals(other.klantId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Klant: [Id=" + klantId + "]-[klantNaam=" + klantNaam + "]";
    }

    public Boolean getIsChanged() {
        return isChanged;
    }

    public void setIsChanged(Boolean isChanged) {
        this.isChanged = isChanged;
    }
}
